home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / adodb / adodb-error.inc.php < prev    next >
PHP Script  |  2005-05-17  |  9KB  |  258 lines

  1. <?php
  2. /** 
  3.  * @version V4.63 17 May 2005 (c) 2000-2005 John Lim (jlim@natsoft.com.my). All rights reserved.
  4.  * Released under both BSD license and Lesser GPL library license. 
  5.  * Whenever there is any discrepancy between the two licenses, 
  6.  * the BSD license will take precedence. 
  7.  *
  8.  * Set tabs to 4 for best viewing.
  9.  * 
  10.  * The following code is adapted from the PEAR DB error handling code.
  11.  * Portions (c)1997-2002 The PHP Group.
  12.  */
  13.  
  14.  
  15. if (!defined("DB_ERROR")) define("DB_ERROR",-1);
  16.  
  17. if (!defined("DB_ERROR_SYNTAX")) {
  18.     define("DB_ERROR_SYNTAX",              -2);
  19.     define("DB_ERROR_CONSTRAINT",          -3);
  20.     define("DB_ERROR_NOT_FOUND",           -4);
  21.     define("DB_ERROR_ALREADY_EXISTS",      -5);
  22.     define("DB_ERROR_UNSUPPORTED",         -6);
  23.     define("DB_ERROR_MISMATCH",            -7);
  24.     define("DB_ERROR_INVALID",             -8);
  25.     define("DB_ERROR_NOT_CAPABLE",         -9);
  26.     define("DB_ERROR_TRUNCATED",          -10);
  27.     define("DB_ERROR_INVALID_NUMBER",     -11);
  28.     define("DB_ERROR_INVALID_DATE",       -12);
  29.     define("DB_ERROR_DIVZERO",            -13);
  30.     define("DB_ERROR_NODBSELECTED",       -14);
  31.     define("DB_ERROR_CANNOT_CREATE",      -15);
  32.     define("DB_ERROR_CANNOT_DELETE",      -16);
  33.     define("DB_ERROR_CANNOT_DROP",        -17);
  34.     define("DB_ERROR_NOSUCHTABLE",        -18);
  35.     define("DB_ERROR_NOSUCHFIELD",        -19);
  36.     define("DB_ERROR_NEED_MORE_DATA",     -20);
  37.     define("DB_ERROR_NOT_LOCKED",         -21);
  38.     define("DB_ERROR_VALUE_COUNT_ON_ROW", -22);
  39.     define("DB_ERROR_INVALID_DSN",        -23);
  40.     define("DB_ERROR_CONNECT_FAILED",     -24);
  41.     define("DB_ERROR_EXTENSION_NOT_FOUND",-25);
  42.     define("DB_ERROR_NOSUCHDB",           -25);
  43.     define("DB_ERROR_ACCESS_VIOLATION",   -26);
  44. }
  45.  
  46. function adodb_errormsg($value)
  47. {
  48. global $ADODB_LANG,$ADODB_LANG_ARRAY;
  49.  
  50.     if (empty($ADODB_LANG)) $ADODB_LANG = 'en';
  51.     if (isset($ADODB_LANG_ARRAY['LANG']) && $ADODB_LANG_ARRAY['LANG'] == $ADODB_LANG) ;
  52.     else {
  53.         include_once(ADODB_DIR."/lang/adodb-$ADODB_LANG.inc.php");
  54.     }
  55.     return isset($ADODB_LANG_ARRAY[$value]) ? $ADODB_LANG_ARRAY[$value] : $ADODB_LANG_ARRAY[DB_ERROR];
  56. }
  57.  
  58. function adodb_error($provider,$dbType,$errno)
  59. {
  60.     //var_dump($errno);
  61.     if (is_numeric($errno) && $errno == 0) return 0;
  62.     switch($provider) { 
  63.     case 'mysql': $map = adodb_error_mysql(); break;
  64.     
  65.     case 'oracle':
  66.     case 'oci8': $map = adodb_error_oci8(); break;
  67.     
  68.     case 'ibase': $map = adodb_error_ibase(); break;
  69.     
  70.     case 'odbc': $map = adodb_error_odbc(); break;
  71.     
  72.     case 'mssql':
  73.     case 'sybase': $map = adodb_error_mssql(); break;
  74.     
  75.     case 'informix': $map = adodb_error_ifx(); break;
  76.     
  77.     case 'postgres': return adodb_error_pg($errno); break;
  78.     
  79.     case 'sqlite': return $map = adodb_error_sqlite(); break;
  80.     default:
  81.         return DB_ERROR;
  82.     }    
  83.     //print_r($map);
  84.     //var_dump($errno);
  85.     if (isset($map[$errno])) return $map[$errno];
  86.     return DB_ERROR;
  87. }
  88.  
  89. //**************************************************************************************
  90.  
  91. function adodb_error_pg($errormsg)
  92. {
  93.     if (is_numeric($errormsg)) return (integer) $errormsg;
  94.     static $error_regexps = array(
  95.             '/(Table does not exist\.|Relation [\"\'].*[\"\'] does not exist|sequence does not exist|class ".+" not found)$/' => DB_ERROR_NOSUCHTABLE,
  96.             '/Relation [\"\'].*[\"\'] already exists|Cannot insert a duplicate key into (a )?unique index.*/'      => DB_ERROR_ALREADY_EXISTS,
  97.             '/divide by zero$/'                     => DB_ERROR_DIVZERO,
  98.             '/pg_atoi: error in .*: can\'t parse /' => DB_ERROR_INVALID_NUMBER,
  99.             '/ttribute [\"\'].*[\"\'] not found|Relation [\"\'].*[\"\'] does not have attribute [\"\'].*[\"\']/' => DB_ERROR_NOSUCHFIELD,
  100.             '/parser: parse error at or near \"/'   => DB_ERROR_SYNTAX,
  101.             '/referential integrity violation/'     => DB_ERROR_CONSTRAINT,
  102.             '/Relation [\"\'].*[\"\'] already exists|Cannot insert a duplicate key into (a )?unique index.*|duplicate key violates unique constraint/'     
  103.                   => DB_ERROR_ALREADY_EXISTS
  104.         );
  105.     reset($error_regexps);
  106.     while (list($regexp,$code) = each($error_regexps)) {
  107.         if (preg_match($regexp, $errormsg)) {
  108.             return $code;
  109.         }
  110.     }
  111.     // Fall back to DB_ERROR if there was no mapping.
  112.     return DB_ERROR;
  113. }
  114.     
  115. function adodb_error_odbc()
  116. {
  117. static $MAP = array(
  118.             '01004' => DB_ERROR_TRUNCATED,
  119.             '07001' => DB_ERROR_MISMATCH,
  120.             '21S01' => DB_ERROR_MISMATCH,
  121.             '21S02' => DB_ERROR_MISMATCH,
  122.             '22003' => DB_ERROR_INVALID_NUMBER,
  123.             '22008' => DB_ERROR_INVALID_DATE,
  124.             '22012' => DB_ERROR_DIVZERO,
  125.             '23000' => DB_ERROR_CONSTRAINT,
  126.             '24000' => DB_ERROR_INVALID,
  127.             '34000' => DB_ERROR_INVALID,
  128.             '37000' => DB_ERROR_SYNTAX,
  129.             '42000' => DB_ERROR_SYNTAX,
  130.             'IM001' => DB_ERROR_UNSUPPORTED,
  131.             'S0000' => DB_ERROR_NOSUCHTABLE,
  132.             'S0001' => DB_ERROR_NOT_FOUND,
  133.             'S0002' => DB_ERROR_NOSUCHTABLE,
  134.             'S0011' => DB_ERROR_ALREADY_EXISTS,
  135.             'S0012' => DB_ERROR_NOT_FOUND,
  136.             'S0021' => DB_ERROR_ALREADY_EXISTS,
  137.             'S0022' => DB_ERROR_NOT_FOUND,
  138.             'S1000' => DB_ERROR_NOSUCHTABLE,
  139.             'S1009' => DB_ERROR_INVALID,
  140.             'S1090' => DB_ERROR_INVALID,
  141.             'S1C00' => DB_ERROR_NOT_CAPABLE
  142.         );
  143.         return $MAP;
  144. }
  145.  
  146. function adodb_error_ibase()
  147. {
  148. static $MAP = array(
  149.             -104 => DB_ERROR_SYNTAX,
  150.             -150 => DB_ERROR_ACCESS_VIOLATION,
  151.             -151 => DB_ERROR_ACCESS_VIOLATION,
  152.             -155 => DB_ERROR_NOSUCHTABLE,
  153.             -157 => DB_ERROR_NOSUCHFIELD,
  154.             -158 => DB_ERROR_VALUE_COUNT_ON_ROW,
  155.             -170 => DB_ERROR_MISMATCH,
  156.             -171 => DB_ERROR_MISMATCH,
  157.             -172 => DB_ERROR_INVALID,
  158.             -204 => DB_ERROR_INVALID,
  159.             -205 => DB_ERROR_NOSUCHFIELD,
  160.             -206 => DB_ERROR_NOSUCHFIELD,
  161.             -208 => DB_ERROR_INVALID,
  162.             -219 => DB_ERROR_NOSUCHTABLE,
  163.             -297 => DB_ERROR_CONSTRAINT,
  164.             -530 => DB_ERROR_CONSTRAINT,
  165.             -803 => DB_ERROR_CONSTRAINT,
  166.             -551 => DB_ERROR_ACCESS_VIOLATION,
  167.             -552 => DB_ERROR_ACCESS_VIOLATION,
  168.             -922 => DB_ERROR_NOSUCHDB,
  169.             -923 => DB_ERROR_CONNECT_FAILED,
  170.             -924 => DB_ERROR_CONNECT_FAILED
  171.         );
  172.         
  173.         return $MAP;
  174. }
  175.  
  176. function adodb_error_ifx()
  177. {
  178. static $MAP = array(
  179.             '-201'    => DB_ERROR_SYNTAX,
  180.             '-206'    => DB_ERROR_NOSUCHTABLE,
  181.             '-217'    => DB_ERROR_NOSUCHFIELD,
  182.             '-329'    => DB_ERROR_NODBSELECTED,
  183.             '-1204'   => DB_ERROR_INVALID_DATE,
  184.             '-1205'   => DB_ERROR_INVALID_DATE,
  185.             '-1206'   => DB_ERROR_INVALID_DATE,
  186.             '-1209'   => DB_ERROR_INVALID_DATE,
  187.             '-1210'   => DB_ERROR_INVALID_DATE,
  188.             '-1212'   => DB_ERROR_INVALID_DATE
  189.        );
  190.        
  191.        return $MAP;
  192. }
  193.  
  194. function adodb_error_oci8()
  195. {
  196. static $MAP = array(
  197.              1 => DB_ERROR_ALREADY_EXISTS,
  198.             900 => DB_ERROR_SYNTAX,
  199.             904 => DB_ERROR_NOSUCHFIELD,
  200.             923 => DB_ERROR_SYNTAX,
  201.             942 => DB_ERROR_NOSUCHTABLE,
  202.             955 => DB_ERROR_ALREADY_EXISTS,
  203.             1476 => DB_ERROR_DIVZERO,
  204.             1722 => DB_ERROR_INVALID_NUMBER,
  205.             2289 => DB_ERROR_NOSUCHTABLE,
  206.             2291 => DB_ERROR_CONSTRAINT,
  207.             2449 => DB_ERROR_CONSTRAINT
  208.         );
  209.        
  210.     return $MAP;
  211. }
  212.  
  213. function adodb_error_mssql()
  214. {
  215. static $MAP = array(
  216.           208 => DB_ERROR_NOSUCHTABLE,
  217.           2601 => DB_ERROR_ALREADY_EXISTS
  218.        );
  219.        
  220.     return $MAP;
  221. }
  222.  
  223. function adodb_error_sqlite()
  224. {
  225. static $MAP = array(
  226.           1 => DB_ERROR_SYNTAX
  227.        );
  228.        
  229.     return $MAP;
  230. }
  231.  
  232. function adodb_error_mysql()
  233. {
  234. static $MAP = array(
  235.            1004 => DB_ERROR_CANNOT_CREATE,
  236.            1005 => DB_ERROR_CANNOT_CREATE,
  237.            1006 => DB_ERROR_CANNOT_CREATE,
  238.            1007 => DB_ERROR_ALREADY_EXISTS,
  239.            1008 => DB_ERROR_CANNOT_DROP,
  240.            1045 => DB_ERROR_ACCESS_VIOLATION,
  241.            1046 => DB_ERROR_NODBSELECTED,
  242.            1049 => DB_ERROR_NOSUCHDB,
  243.            1050 => DB_ERROR_ALREADY_EXISTS,
  244.            1051 => DB_ERROR_NOSUCHTABLE,
  245.            1054 => DB_ERROR_NOSUCHFIELD,
  246.            1062 => DB_ERROR_ALREADY_EXISTS,
  247.            1064 => DB_ERROR_SYNTAX,
  248.            1100 => DB_ERROR_NOT_LOCKED,
  249.            1136 => DB_ERROR_VALUE_COUNT_ON_ROW,
  250.            1146 => DB_ERROR_NOSUCHTABLE,
  251.            1048 => DB_ERROR_CONSTRAINT,
  252.             2002 => DB_ERROR_CONNECT_FAILED,
  253.             2005 => DB_ERROR_CONNECT_FAILED
  254.        );
  255.        
  256.     return $MAP;
  257. }
  258. ?>